//
// Created by deng on 18-11-28.
//

#ifndef DOUDIZHU_ENDGAME_SOLUTION_H
#define DOUDIZHU_ENDGAME_SOLUTION_H

#include "negamax.h"

namespace doudizhu_endgame {

#define RESET "\033[0m"
#define BLACK "\033[30m" // Black
#define RED "\033[31m" // Red
#define GREEN "\033[32m" // Green
#define YELLOW "\033[33m" // Yellow
#define BLUE "\033[34m" // Blue
#define MAGENTA "\033[35m" // Magenta
#define CYAN "\033[36m" // Cyan
#define WHITE "\033[37m" // White
#define BOLDBLACK "\033[1m\033[30m" // Bold Black
#define BOLDRED "\033[1m\033[31m" // Bold Red
#define BOLDGREEN "\033[1m\033[32m" // Bold Green
#define BOLDYELLOW "\033[1m\033[33m" // Bold Yellow
#define BOLDBLUE "\033[1m\033[34m" // Bold Blue
#define BOLDMAGENTA "\033[1m\033[35m" // Bold Magenta
#define BOLDCYAN "\033[1m\033[36m" // Bold Cyan
#define BOLDWHITE "\033[1m\033[37m" // Bold White

class Solution {
public:

    Solution() : engine_(new Negamax) {}
    ~Solution() { delete engine_; }

    void set_time_out();
    void start();

private:

    Negamax* engine_;

    void process_result(TreeNode* node);

    void restart_search(TreeNode* node, Pattern* last);

    void reset_engine();

    std::string input_stdin(const char *prompt);
};

}  //namespace doudizhu_endgame

#endif //DOUDIZHU_ENDGAME_SOLUTION_H
